static double
course_rad(double lat1, double lon1, double lat2, double lon2)
{
- return mod(atan2(sin(lon1 - lon2) * cos(lat2), cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon1-lon2)), 2 * M_PI);
+ double v1, v2;
+ v1 = sin(lon1 - lon2) * cos(lat2);
+ v2 = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon1 - lon2);
+ if (fabs(v2) < 0.000000000000001) v2 = 0.0; /* fix calculation diff. between 32- and 64-bit systems */
+ return atan2(v1, v2);
}
static double